/*
 * @Author: Jee
 * @Date: 2022-02-01 22:21:57
 * @LastEditTime: 2022-02-04 09:32:01
 * @LastEditors: Please set LastEditors
 * @Description: 指定小说地址，下载小说
 * @FilePath: \testHtmld:\SoftWareProject\mySoft\myNode\downloadBooks.js
 */
const fs = require('fs')
const path = require('path')
let file = path.resolve(__dirname, './file.txt'); //存入文件位置  我的大明新帝国
const {
    Builder,
    By,
    Key,
    until
} = require('selenium-webdriver');

var currentPageNum = 1; //第一章节
var maxPageNum = 2059; //最大章节数
var driver = new Builder().forBrowser('firefox').build();
var list = []
start()
async function start() {

    await driver.get('https://www.vipxs.la/117_117979/'); //小说 目录首页
    let listLength = await driver.findElements(By.css('.box_con dd')); //获取小说所有章节的标签
    maxPageNum = listLength.length; //更新最大章节数
    inWeb(); //进入小说章节页面
};

async function inWeb() {

    console.log(`当前正在获取第${currentPageNum}页数据，共${maxPageNum}页`)

    if (currentPageNum < maxPageNum + 1) {
        console.log("------------开始点击   进入文章-------------")
        let pageItem = await driver.findElements(By.css('.box_con dd'));

        let item = await pageItem[currentPageNum - 1].findElement(By.css("a")) //更具章节数进入小说页面
        let href = await item.getAttribute("href")
        await driver.get(href); //小说 内容页面  通过a标签的href地址进入
        // item.click();//点击事件来进入页面
        setTimeout(() => {
            getData(); //获取小说数据
        }, 200); //增加延迟时间给页面加载，如果没有加载完成无法获取元素

    }

}

async function getData() {
    while (true) {
        let notError = true;
        try { //更具css样式获取对应内容
            let title = await driver.findElement(By.css('.bookname h1'));
            let text = await driver.findElement(By.id("content"));

            title = await title.getText(); //标题
            text = await text.getText(); //内容
            currentPageNum++; //获取内容后增加章节数
            //处理标题没有章节标识
            if (title.indexOf("章") == -1) {
                var arr = title.match(/\d+(.\d+)?/g);
                if (arr) {
                    title = title.replace(arr[0], arr[0] + "章");
                }
            }
            let str = "\n" + title + "\n" + text
                // 异步写入数据到文件
            fs.appendFile(file, str, { //把获得的章节名称和内容写入文档
                encoding: 'utf8'
            }, err => {})
            if (currentPageNum < maxPageNum + 1) { //如果章节数没有达到最大章节数就继续爬取数据

                start()
            }
        } catch (error) {

            if (e) notError = false
            console.log("error ------------", error.message);

        } finally {
            if (notError) break;
        }
    }
}